if ((pte_val(*kpte) & _PAGE_PSE) == 0) {
pte_t old = *kpte;
pte_t standard = mk_pte(page, PAGE_KERNEL);
- set_pte_atomic(kpte, mk_pte(page, prot));
+ set_pte_batched(kpte, mk_pte(page, prot));
if (pte_same(old,standard))
get_page(kpte_page);
} else {
set_pmd_pte(kpte,address,mk_pte(split, PAGE_KERNEL));
}
} else if ((pte_val(*kpte) & _PAGE_PSE) == 0) {
- set_pte_atomic(kpte, mk_pte(page, PAGE_KERNEL));
+ set_pte_batched(kpte, mk_pte(page, PAGE_KERNEL));
__put_page(kpte_page);
}
if (err)
break;
}
+ flush_page_update_queue();
spin_unlock_irqrestore(&cpa_lock, flags);
return err;
}
* within a page table are directly modified. Thus, the following
* hook is made available.
*/
-#ifdef CONFIG_XEN_WRITABLE_PAGETABLES
+#define set_pte_batched(pteptr, pteval) \
+queue_l1_entry_update(pteptr, (pteval).pte_low)
#define set_pte(pteptr, pteval) (*(pteptr) = pteval)
-#define set_pte_atomic(pteptr, pteval) (*(pteptr) = pteval)
-#else
-#define set_pte(pteptr, pteval) xen_l1_entry_update(pteptr, (pteval).pte_low)
-#define set_pte_atomic(pteptr, pteval) xen_l1_entry_update(pteptr, (pteval).pte_low)
-#endif
+#define set_pte_atomic(pteptr, pteval) set_pte(pteptr,pteval)
/*
* (pmds are folded into pgds so this doesn't get actually called,
* but the define is needed for a generic inline function.)